Telegram Group Search
Даже во сне думаешь о UI/UX, реализуешь адаптивность, отзывчивость, тестируешь на всех разрешениях, потом открываешь супер популярный сайт и не можешь до конца меню пролистать, свою станцию выбрать, потому что экран кончился, а меню уходит ниже...

#ux
Эван думает так же

#ai
Мой Argus бот для распознавания текста на фото и изображениях потихоньку раскручивается

Добавил к нему кнопки быстрых действий и увеличил число LLM до четырех - две основные и две на фоллбэк.

Эксперименты показали, что Mistral OCR в среднем по качеству близок к FineReader (где-то лучше, где-то хуже). Но выдают они данные, естественно, в разных форматах.

На неделе добавится распознавание рукописного текста

#tgbot #argus #php #ai
Книжки

Общеполезное


The Pragmatic Programmer by Andrew Hunt and David Thomas
Code Complete by Steve McConnell

Coding

Clean Code by Robert C. Martin
Refactoring by Martin Fowler

Software Architecture

Designing Data-Intensive Applications by Martin Kleppmann
Object-Oriented Analysis and Design with Applications by Grady Booch

Design Patterns

Design Patterns by Eric Gamma and Others
Domain-Driven Design by Eric Evans

Data Structures and Algorithms

Introduction to Algorithms by Cormen, Leiserson, Rivest, and Stein
Cracking the Coding Interview by Gayle Laakmann McDowell

#learning #book
This media is not supported in your browser
VIEW IN TELEGRAM
Дожили

В Chrome 135 появилась возможность стилизовать нативный <select>

Теперь сайт Аэроэкспреса пофиксят...

#chrome #css
Большой обзор rich text editors для встраивания в свой фронт

#editor #lib
В конце прошлого года маленькие любители атомарного CSS помогли владельцу Tailwind Адаму Уэтену въехать вот в этот новый домик.

Платные продукты и услуги, связанные c Tailwind , приносят Адаму несколько миллионов долларов в год

#tailwind
В CSS есть @scope функция, ограничивающая область применения стилей:

<template>
<div class="box">
<button class="button">Click me</button>
</div>
</template>

<style>
@scope (.box) {
.button {
color: red;
}
}
</style>


Однако полной замены Vue scoped она не может дать. Например, потому, что если компонент выше вывести списком, то во Vue у каждого будет свой data атрибут и своя область видимости стилей, а у @scope всё смешается

Но для ванильных случаев это полезное нововведение

#css
Добавил в Argus распознавание рукописного текста, а так же других сложных картинок (надо в подписи к картинке отправлять символ "+" для перехода в этот режим)

Для этого поэкспериментировал с 18 бесплатными LLM моделями для выбора лучшей, тут отчет

В комментариях люди поделились интересными ссылками для облегчения жизни AI энтузиастов:

https://github.com/marketplace/models/azure-openai/gpt-4o-mini/playground - бесплатный gpt-4o прям на GitHub

https://www.comss.ru/page.php?id=7315 - обход региональных блокировок и не только

#argus #ocr #tgbot
Глубокое клонирование реактивных объектов в Vue 3

Vue 3 использует Proxy для реактивности, что создает проблемы при попытке клонировать объекты. Стандартные методы работают не так, как ожидается:

const state = reactive({ user: { name: "Al" } });

// Проблемы:
const badCopy1 = { ...state }; // сохраняет Proxy-ссылки
const badCopy2 = JSON.parse(JSON.stringify(state)); // теряет методы и Proxy


3 рабочих способа

1. Комбинация toRaw + structuredClone

import { toRaw } from 'vue';

const original = reactive({ data: 123 });
const copy = structuredClone(toRaw(original));


2. Ручное глубокое копирование

function deepClone(obj) {
if (obj === null || typeof obj !== 'object') return obj;
const clone = Array.isArray(obj) ? [] : {};
for (const key in obj) {
clone[key] = deepClone(obj[key]);
}
return clone;
}

const copy = reactive(deepClone(toRaw(original)));


3. Библиотечные решения

import { cloneDeep } from 'lodash-es';
const copy = reactive(cloneDeep(toRaw(obj)));


#tip #reactivity
This media is not supported in your browser
VIEW IN TELEGRAM
Пятничная клубничка

Стартап Argil предлагает загрузить видео себя (или не себя) и создать такого вот клоника для OnlyFans

#ai
Хорошая библиотека Ark-ui, но с особенностями. Особенно у "выпадашки" HoverCard (для меню которая)

Долго мучился с расположением при динамично меняющемся таргет элементе - все как-то через одно место криво работало. Решил поставить :key на HoverCard и инкрементить его при апдейтах - и всё сразу заработало как надо. Ну, ё-моё...

Немного радует, что довольно часто обновляется и фиксят баги.

P.S. Ререндеринг через `:key` - плохая практика. Последний вариант.

#lib #arkui
2025/05/19 23:01:14
Back to Top
HTML Embed Code: